package com.xmcc.utill;

import com.xmcc.pojo.SysAcl;
import org.springframework.web.bind.annotation.RequestMapping;

import java.io.File;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;


public class AclHelperService {


    public static void insertAcl() throws ClassNotFoundException {
        List<String> classPaths = new ArrayList<>();
        File file = new File("/com/xmcc/controller");
        //递归拿到所有java文件 todo:
        File[] files = file.listFiles();
        for (File file1 : files) {
            if(file1.isFile()) {//只是文件就直接取 如果是文件夹就递归,,,,
                if (file1.getName().endsWith(".java")){
                    //com.xmcc.controller.AdminController
                    classPaths.add("com.xmcc.controller."+file1.getName().replace(".java",""));
                }
            }
        }
        for (String classPath : classPaths) {
            Class<?> aClass = Class.forName(classPath);
            //拿到某个类中的所有方法
            Method[] methods = aClass.getMethods();
            List<SysAcl> aclList = new ArrayList<>();
            SysAcl acl;
            //循环取出每个方法：
            for (Method method : methods) {
                //判断拥有自定义注解
                if( method.isAnnotationPresent(AclHelper.class)){
                    //获得类上的RequestMapping注解：
                    RequestMapping controller = aClass.getAnnotation(RequestMapping.class);
                    String classUrl = controller.value()[0];//判断url是否以/开头
                    System.out.println(classUrl);
                    acl = new SysAcl();
                    //获得AclHelper注解对象：
                    AclHelper annotation = method.getAnnotation(AclHelper.class);
                    acl.setName( annotation.value());
                    acl.setAclModuleId(annotation.module_id());
                    System.out.println( annotation.value());//权限点的名字
                    System.out.println( annotation.module_id());//权限点属于权限模块的id
                    //判断方法上的注解是否存在RequestMapping：
                    if(method.isAnnotationPresent(RequestMapping.class)){
                        //获得方法上的RequestMapping注解：
                        RequestMapping requestMapping = method.getAnnotation(RequestMapping.class);
                        //取得方法上所有RequestMapping上的注解数组对象：
                        String[] value = requestMapping.value();
                        //取第0位：
                        System.out.println(value[0]);

                        System.out.println("/"+classUrl+"/"+value[0]);
                        acl.setUrl("/"+classUrl+"/"+value[0]);
                    }
                }
            }
            //把acl集合插入到数据库就ok
        }

    }

    public static void main(String[] args) throws ClassNotFoundException {
        insertAcl();
    }
}
